/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.uca.dss.curso2011.grupo1.clases;

/**
 * Clase que permite crear instancias de los trayectos.
 * @author Alejandro & David
 */
public class Trayecto {
    /**
     * Atributos de la clase Trayecto.
     */
    private int numeroTramos;
    private Ciudad origen;
    private Ciudad destino;
    /**
     * Contructor Trayecto(), crea una instancia de la clase Trayecto.
     * @param numTramos entero que define el numero de tramos en los que se divide el trayecto.
     * @param origen instancia de la clase Ciudad que identifica la ciudad en la que comienza el trayecto.
     * @param destino instancia de la clase Ciudad que identifica la ciudad en la que finaliza el trayecto.
     */
    public Trayecto(int numTramos, Ciudad origen, Ciudad destino){
        this.numeroTramos = numTramos;
        this.origen = origen;
        this.destino = destino;
    }
    /**
     * Función que comprueba la existencia de un trayecto entre una ciudad origen y otra destino.
     * @param origen instancia de la clase Ciudad, que representa la ciudad de origen del trayecto.
     * @param destino instancia de la clase Ciudad, que representa la ciaudad destino del trayecto.
     * @return Devuelve true o false, en funcion de si el trayecto es el buscado.
     */
    public boolean existeTrayecto (Ciudad origen, Ciudad destino){
        return (this.obtieneOrigen().equals(origen) && this.obtieneDestino().equals(destino));
    }
    /**
     * Función que calcula el precio de un trayecto.
     * @param precioMedioTransporte float que representa el precio del medio de transporte que realiza el trayecto.
     * @return Devuelve un float con el precio del trayecto, para el medio de transporte dado.
     */
    public double calculaPrecio(double precioMedioTransporte){
        return this.numeroTramos*precioMedioTransporte;
    }


    /**
     * Método que compara un trayecto con el actual.
     * @param trayecto Objeto trayecto con el que se desea comparar.
     * @return True en caso afirmativo, y false en caso negativo.
     */
     public boolean equals(Trayecto trayecto) {
        return this.obtieneDestino().equals(trayecto.obtieneDestino()) && this.numeroTramos == trayecto.numeroTramos && this.obtieneOrigen().equals(trayecto.obtieneOrigen());
    }

    /**
     * Método que devuelve la ciudad origen del trayecto.
     * @return the origen
     */
    public Ciudad obtieneOrigen() {
        return this.origen;
    }

    /**
     * Método que devuelve la ciudad destino del trayecto.
     * @return the destino
     */
    public Ciudad obtieneDestino() {
        return this.destino;
    }
}
